package logic.service;

import dao.ClassDayDAO;
import dao.GroupDAO;
import dao.TeacherDAO;
import entity.ClassDay;
import entity.ClassGroup;
import entity.Teacher;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import vo.ClassDayVO;
import vo.IValueObject;

/**
 *
 * @author Alexander
 */
public class ClassDayService implements IService {

    @Override
    public void persist(IValueObject vo, EntityManager em) {
        ClassDay entity = new ClassDay();
        entity.setId(((ClassDayVO) vo).getId());
        entity.setDay(((ClassDayVO) vo).getDay());
        entity.setHour(((ClassDayVO) vo).getHour());
        entity.setSpan(((ClassDayVO) vo).getSpan());
        entity.setClassRoom(((ClassDayVO) vo).getClassRoom());

        //entity.setGroup();
        //entity.setTeacher();

        new ClassDayDAO().persist(entity, em);
    }

    @Override
    public IValueObject find(Object id, EntityManager em) {
        ClassDay d = (ClassDay) new ClassDayDAO().find(id, em);
        if (d != null) {
            return d.toVO();
        } else {
            return null;
        }
    }

    @Override
    public void update(IValueObject vo, EntityManager em) {
        ClassDay entity = new ClassDay();
        //entity.setId(((ClassDayVO) vo).getId());
        entity.setDay(((ClassDayVO) vo).getDay());
        entity.setHour(((ClassDayVO) vo).getHour());
        entity.setSpan(((ClassDayVO) vo).getSpan());
        entity.setClassRoom(((ClassDayVO) vo).getClassRoom());

        entity.setGroup((ClassGroup)new GroupDAO().find(((ClassDayVO) vo).getGroupId(), em));
        if (((ClassDayVO) vo).getTeacherId() == -1){
            entity.setTeacher(null);
            ClassDay oldClassDay = ((ClassDay) new ClassDayDAO().find(((ClassDayVO) vo).getId(), em));
            oldClassDay.getTeacher().getClassDays().remove(oldClassDay);
        } else {
            entity.setTeacher((Teacher) new TeacherDAO().find(((ClassDayVO) vo).getTeacherId(), em));
        }

        new ClassDayDAO().update(entity, em);
    }

    @Override
    public void delete(Object id, EntityManager em) {
        new ClassDayDAO().delete(id, em);
    }

    @Override
    public List<IValueObject> getList(EntityManager em) {
        List<IValueObject> classdayVO = new ArrayList<>();
        for (Object classDay : new ClassDayDAO().getList(em)) {
            classdayVO.add(((ClassDay) classDay).toVO());
        }
        return classdayVO;
    }
}
